package easy;

import java.util.HashMap;

/**
 * @Author YNA-User
 * @CreateDate 2020/4/14 下午 3:08
 * @TODO 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 *
 * 案例:
 *
 * s = "leetcode"
 * 返回 0.
 *
 * s = "loveleetcode",
 * 返回 2.
 *  
 *
 * 注意事项：您可以假定该字符串只包含小写字母。
 */
public class SolutionFirstUniqChar {

    public static void main(String[] args) {
        System.out.println("firstUniqChar() = " + firstUniqChar("loveleetcode"));
    }

    /**
     *  思路: 利用 map key-value 的特性, 允许存入相同的 key, 只修改 value ,
     *  然后利用 两个 for 来查找 value 为 1 的 char, 即可找到第一个不重复的字符
     * @param s
     * @return
     */
    private static int firstUniqChar(String s) {
        int result = -1;
        if (s.isEmpty()) {
            return result;
        }
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }

        for (int i = 0; i < s.length(); i++) {
            if (map.get(s.charAt(i)) == 1) {
                result = i;
                break;
            }
        }
        return result;
    }
}
